20180901 畫出一個K線圖
我們先使用上一節的代碼抓出台積電的個股日成交資訊 (上一張有詳細說明)
import pandas as pd
from datetime import datetime
date = datetime.now()
month = int(int(str(date)[5:7]))
day = int(int(str(date)[8:10]))
if day<=4:
month= month-1
stockno = 2330
table = pd.DataFrame()
m=1
while m<=month:
df = pd.read_html('http://www.twse.com.tw/exchangeReport/STOCK_DAY?response=html&date=20180'+str(m)+'01&stockNo='+str(stockno))[0]
df.columns=['日期','成交股數','成交金額','開盤價','最高價','最低價','收盤價','漲跌價差','成交筆數']
table = pd.concat([table,df],ignore_index=True)
m += 1
接這是這章新的代碼,
我們直接將Table的"日期"轉成西元年設為"引索"(index),
如此一來要用matplot做圖可以直接調用dataframe的欄位即可!
import matplotlib.pyplot as plt
#將日期的民國年取出來轉成西元年(x['日期']+1911)做replace
table['日期'] = table.apply(lambda x: x['日期'].replace(x['日期'][0:3],str(int(x['日期'][0:3])+ 1911)), axis=1)
#轉成時間資料並設成引索,給新的dataframe:table_time
table['日期'] = pd.to_datetime(table['日期'])
table_time= table.set_index('日期')
#設定圖畫的size
plt.figure(figsize=(15, 5))
#畫出收盤價 (o- 為點加線, alpha 為透明度)
plt.plot(table_time['收盤價'],'o-',alpha=0.6)
plt.show()
接著又要用到新的模塊拉,分別是:
Matplotlib.finance ,要畫蠟燭圖需要用到此模塊。(pip3 install mpl_finance)
Numpy, 因為蠟燭圖只吃array我們需要將Pandas的dataframe轉成array。(pip3 install numpy)
#導入模組
import mpl_finance as mpf
from matplotlib.pylab import date2num #mpf畫圖需要將日期轉乘number格式
import numpy as np
#取出蠟燭圖需要的資料(candlestick_ochl)給一個新的df:table_candle
#並將日期轉成number的格式
table_candle= table[['日期','開盤價','收盤價','最高價','最低價']] #欄位必須照順序!!!
table_candle['日期']=date2num(table['日期'])
#用numpy模組,將datafram轉成array
quotes=np.array(table_candle)
#做圖
fig,ax=plt.subplots(figsize=(15,5))
mpf.candlestick_ochl(ax,quotes,width=1,colorup='r',colordown='g') #利用mpf的模組畫K線圖
ax.xaxis_date() #將圖的x軸轉成時間格式
plt.show()